package cn.iocoder.yudao.server;

import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class AliHouseUtil {
    public static void main(String[] args) {
        try {
            // 读取JSON文件
            String jsonFilePath = "D:/alihouse_22.txt";
            String excelFilePath = "D:/alihouse_22.xlsx";
            String auctionName = "二拍";
            String jsonContent = new String(Files.readAllBytes(Paths.get(jsonFilePath)));

            // 解析JSON
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode rootNode = objectMapper.readTree(jsonContent);
            JsonNode dataArray = rootNode.get("data");

            // 创建工作簿和工作表
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("房源信息");

            // 创建表头
            Row headerRow = sheet.createRow(0);
            String[] headers = {"序号", "拍卖时间", "行政区", "地址", "套内面积", "建筑年代", "楼层\\总楼层", "评估价", "起拍价", "成交价", "竞价次数", "阶段", "成交比率", "成交单价"};
            for (int i = 0; i < headers.length; i++) {
                Cell cell = headerRow.createCell(i);
                cell.setCellValue(headers[i]);
            }

            // 创建千分符格式
            CellStyle thousandSeparatorStyle = workbook.createCellStyle();
            DataFormat format = workbook.createDataFormat();
            thousandSeparatorStyle.setDataFormat(format.getFormat("#,##0.00"));

            // 处理数据
            int rowNum = 1;
            int index = 1;
            for (JsonNode item : dataArray) {
                Row row = sheet.createRow(rowNum++);

                // 序号
                row.createCell(0).setCellValue(index++);

                // 拍卖时间（从end字段转换）
                long endTimestamp = item.get("end").asLong();
                String auctionTime = new SimpleDateFormat("yyyyMMdd").format(new Date(endTimestamp));
                row.createCell(1).setCellValue(auctionTime);

                // 行政区（留空）
                if (item.get("title").asText().indexOf("区") > 0) {
                    int start = item.get("title").asText().indexOf("区") - 2;
                    row.createCell(2).setCellValue(item.get("title").asText().substring(start, start + 3));
                } else {
                    row.createCell(2).setCellValue("");
                }

                // 地址（对应title字段）
                String title = item.get("title").asText();
                row.createCell(3).setCellValue(title);

                // 套内面积（留空）
                row.createCell(4).setCellValue("");

                // 建筑年代（留空）
                row.createCell(5).setCellValue("");

                // 楼层\总楼层（留空）
                row.createCell(6).setCellValue("");

                // 评估价（对应consultPrice字段）
                double consultPrice = item.get("consultPrice").asDouble() == 0 ? item.get("marketPrice").asDouble() : item.get("consultPrice").asDouble();
                row.createCell(7).setCellValue(consultPrice);
                Cell consultPriceCell = row.createCell(7);
                consultPriceCell.setCellValue(consultPrice);
                consultPriceCell.setCellStyle(thousandSeparatorStyle);

                // 起拍价（对应initialPrice字段）
                double initialPrice = item.get("initialPrice").asDouble();
                Cell initialPriceCell = row.createCell(8);
                initialPriceCell.setCellValue(initialPrice);
                initialPriceCell.setCellStyle(thousandSeparatorStyle);

                // 成交价（仅当status为done时填写）
                String status = item.get("status").asText();
                double currentPrice = item.get("currentPrice").asDouble();
                Cell currentPriceCell = row.createCell(9);
                if ("done".equals(status)) {
                    currentPriceCell.setCellValue(currentPrice);
                    currentPriceCell.setCellStyle(thousandSeparatorStyle);
                } else {
                    currentPriceCell.setCellValue("");
                }

                // 竞价次数（对应bidCount字段）
                int bidCount = item.get("bidCount").asInt();
                row.createCell(10).setCellValue(bidCount);

                // 阶段（默认填写一拍）
                row.createCell(11).setCellValue(auctionName);

                // 成交比率（成交价除以评估价，保留两位小数）
                double dealRatio = 0.0;
                if (consultPrice != 0 && "done".equals(status)) {
                    dealRatio = (currentPrice / consultPrice) * 100;
                    row.createCell(12).setCellValue(String.format("%.2f%%", dealRatio));
                } else {
                    row.createCell(12).setCellValue("");
                }

                // 成交单价（留空）
                row.createCell(13).setCellValue("");
            }

            // 设置列宽以适应内容
            for (int i = 0; i < headers.length; i++) {
                sheet.autoSizeColumn(i);
                // 添加额外宽度确保内容不会过于拥挤
                sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 1000);
            }

            // 写入Excel文件
            FileOutputStream fileOut = new FileOutputStream(excelFilePath);
            workbook.write(fileOut);
            fileOut.close();
            workbook.close();

            System.out.println(String.format("Excel文件已成功生成：%s", excelFilePath));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void getAliHouseListHtml() {
        try {

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}